package repositorios;

import dados.Funcionario;
import dados.Cliente;
import dados.Pessoa;

public class RepositorioPessoasArray implements InterfaceRepositorioPessoa {

	private Pessoa[] pessoa;
	private int contador;

	public RepositorioPessoasArray() {
		this.pessoa = new Pessoa[10];
		contador = 0;

	}

	@Override
	public void inserir(Pessoa p) {
		if (contador == pessoa.length) {
			Pessoa[] aux = new Pessoa[pessoa.length];
			for (int i = 0; i < pessoa.length; i++) {
				aux[i] = pessoa[i];
			}

			Pessoa[] pessoa = new Pessoa[aux.length * 2];
			for (int i = 0; i < contador; i++) {
				pessoa[i] = aux[i];
			}
			
			pessoa[contador] = p;
		} else {
			pessoa[contador] = p;
		}

		contador++;

	}

	@Override
	public void remover(Pessoa p) {
		int j = 0;
		while (j < contador && !pessoa[j].getCPF().equals(p.getCPF())) {
			j++;
		}
		for (int k = j; j < contador - 1; k++) {
			pessoa[k] = pessoa[k + 1];
		}
		contador--;
	}

	@Override
	public Pessoa procurar(String CPF) {
		Pessoa p = null;
		for (Pessoa pessoa2 : pessoa) {
			if (pessoa2.getCPF().equals(CPF)) {
				p = pessoa2;
			}
		}
		return p;
	}

	@Override
	public void atualizar(Pessoa p) {
		Pessoa p2 = (Pessoa) procurar(p.getCPF());
		if (p2 instanceof Funcionario) {
			((Funcionario) p2).setSalario(((Funcionario) p2).getSalario());
			((Funcionario) p2).setComissao(((Funcionario) p2).getComissao());
		}
		if (p2 instanceof Cliente) {
			((Cliente) p2).setTelefone(((Cliente) p2).getTelefone());
		}
	}

	@Override
	public boolean verificar(Pessoa p) {
		for (int i = 0; i < contador; i++) {
			if (pessoa[i].getCPF().equals(p.getCPF())) {
				return true;
			}
		}
		return false;
	}

}